﻿// Models/Components/BaseComponent.cs
using Newtonsoft.Json;

namespace AmisSdk.Models.Components
{
    public class Table : BaseComponent
    {
        public override string Type => "table";

        /// <summary>
        /// 表格标题。
        /// </summary>
        [JsonProperty("title")]
        public string Title { get; set; }

        /// <summary>
        /// 数据源 API 地址。
        /// </summary>
        [JsonProperty("api")]
        public string Api { get; set; }

        /// <summary>
        /// 表格列定义。
        /// </summary>
        [JsonProperty("columns")]
        public List<Column> Columns { get; set; } = new List<Column>();

        /// <summary>
        /// 表格的分页设置。
        /// </summary>
        [JsonProperty("pagination")]
        public Pagination Pagination { get; set; } = new Pagination();

        /// <summary>
        /// 表格的操作栏，如编辑、删除按钮。
        /// </summary>
        [JsonProperty("toolbar")]
        public Toolbar Toolbar { get; set; }  // 可选

        // 其他表格相关属性，如排序、筛选等
    }

    public class Column
    {
        /// <summary>
        /// 数据字段名。
        /// </summary>
        [JsonProperty("name")]
        public string Name { get; set; }

        /// <summary>
        /// 列标题。
        /// </summary>
        [JsonProperty("label")]
        public string Label { get; set; }

        /// <summary>
        /// 列类型，如 text, link, image 等。
        /// </summary>
        [JsonProperty("type")]
        public string Type { get; set; } = "text";

        /// <summary>
        /// 列的宽度。
        /// </summary>
        [JsonProperty("width")]
        public string Width { get; set; }  // 如 "100px", "10%"

        /// <summary>
        /// 是否可排序。
        /// </summary>
        [JsonProperty("sortable")]
        public bool Sortable { get; set; } = false;

        // 其他列相关属性，如过滤器、自定义渲染等
    }

    public class Pagination
    {
        [JsonProperty("pageSize")]
        public int PageSize { get; set; } = 10;

        [JsonProperty("pageSizes")]
        public List<int> PageSizes { get; set; } = new List<int> { 10, 20, 50, 100 };

        [JsonProperty("position")]
        public string Position { get; set; } = "bottom";  // top, bottom, both
    }

    public class Toolbar
    {
        [JsonProperty("actions")]
        public List<ActionButton> Actions { get; set; } = new List<ActionButton>();

        // 其他工具栏相关属性
    }

    public class ActionButton : BaseComponent
    {
        public override string Type => "button";

        [JsonProperty("label")]
        public string Label { get; set; }

        [JsonProperty("actionType")]
        public string ActionType { get; set; } = "dialog";  // dialog, ajax, link, etc.

        [JsonProperty("level")]
        public string Level { get; set; } = "primary";  // primary, secondary, danger, etc.

        [JsonProperty("dialog")]
        public Dialog Dialog { get; set; }  // 如果 actionType 是 dialog

        // 其他按钮相关属性，如 icon, size 等
    }

    public class Dialog
    {
        [JsonProperty("title")]
        public string Title { get; set; }

        [JsonProperty("body")]
        public object Body { get; set; }  // 弹窗主体内容
    }
}
